iT邦幫忙

2021 iThome 鐵人賽

DAY 8
2

大家好!

我們進入今天的主題吧!


物件方法

如果要推入項目至陣列,我們會使用原型方法。
但是,為什麼判斷陣列不能使用原型方法呢?

/* 原型方法 */
([]).push(0); // 1
({}).push(0); // TypeError: {}.push is not a function

/* 靜態方法 */
Array.isArray([]); // true
Array.isArray({}); // false

正如我們昨天提到的:

陣列和物件的方法不能共用,是因為它們擁有不同的特性。

當我們建立一個功能是判斷陣列的原型方法時,就只能應用於陣列而已,實在是沒有意義。
如果硬要檢查不是陣列的型別,就會出現昨天的 TypeError 錯誤,因為只有陣列才能使用這個方法。

簡而言之,只要確定操作對象是使用建構函式建立的物件就使用原型方法;反之,則使用靜態方法。


靜態方法

Ironman.progress = function (date) {
    let c = new Date(date);
    let p = (c - new Date('2021-09-15')) / 86400000 / 30 * 100;
    return Math.round(p) + '%';
};

Ironman.progress('2021-09-23'); // '27%'
Ironman.progress('2021-10-15'); // '100%'

當函式的操作對象不同於原型方法的操作對象時,但是又想要將函式和建構函式打包在一起,此時就會寫成靜態方法,上方的程式碼就是一個舉例。


執行原型方法必須要先建立物件,靜態方法則不需要,因為靜態方法就和一般的函示沒有兩樣,限制也比較少,更能處理較多的資料型別。

差不多也到尾聲了。
如果對文章有任何疑問,歡迎於下方提問和建議!
我是 Felix,我們明天再見!


上一篇
JS 07 - 原型方法
下一篇
JS 09 - 類別函式
系列文
JavaScript 從 50% 開始,打造函式庫不是問題!46
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言